home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
dehqx-20
/
mymainlo.uni
< prev
next >
Wrap
Text File
|
1991-08-23
|
6KB
|
265 lines
unit MyMainLoop;
{ DeHQX v2.0.0 ⌐ Peter Lewis, Aug 1991 }
interface
uses
Types, OSUtils, Files, AppleTalk, Aliases, PPCToolBox, Processes, EPPC, Notification, AppleEvents, MyUtilities, MyTypes;
type
HEreply = record
todo: (T_Other, T_Menu, T_Close, T_Content, T_Key, T_AutoKey, T_Update, T_Dialog,{}
T_MouseMoved, T_Suspend, T_Resume, T_Activate, T_Deactivate, T_HighLevel, T_Resize);
themenu: integer;
theitem: integer;
HEwp: windowPtr;
HEer: eventRecord;
end;
procedure InitMainLoop;
procedure WaitForEvent (var er: eventRecord; sleep: longInt; rgn: rgnHandle);
function HandleEvents (er: eventRecord; var reply: HEreply): boolean;
procedure FinishMainLoop;
implementation
procedure InitMainLoop;
var
dummy_er: eventRecord;
dummy: boolean;
i: integer;
begin
{ Give MultiFinder a chance to setup }
for i := 1 to 5 do
dummy := EventAvail(everyEvent, dummy_er);
InitUtilities;
end;
procedure FinishMainLoop;
begin
end;
procedure WaitForEvent (var er: eventRecord; sleep: longInt; rgn: rgnHandle);
const
max_sleep = 30;
var
b: boolean;
small_sleep: longInt;
begin
repeat
if max_sleep > sleep then
small_sleep := sleep
else
small_sleep := max_sleep;
if WaitGetNextEvent(everyEvent, er, small_sleep, nil) then
leave;
b := IsDialogEvent(er); { should be false, since GNE is }
sleep := sleep - small_sleep;
until sleep <= 0;
end;
function HandleEvents (er: eventRecord; var reply: HEreply): boolean;
var
mResult: longInt;
tempRect, oldRect: rect;
myPt: point;
ch: char;
oe: OSErr;
code: integer;
good: boolean;
userWindow: boolean;
begin
reply.HEer := er;
good := false;
with reply do begin
todo := T_Other;
if IsDialogEvent(HEer) then
if DialogSelect(HEer, HEwp, theitem) then begin
todo := T_Dialog;
good := true;
end;
if HEer.what = MouseDown then
code := FindWindow(HEer.where, HEwp)
else
HEwp := FrontWindow;
userWindow := false;
if (HEwp <> nil) then
userWindow := windowPeek(HEwp)^.windowKind >= userKind;
case HEer.what of
MouseDown:
begin
if code = inMenuBar then begin
mResult := MenuSelect(HEer.where);
if mResult <> 0 then begin
themenu := HiWord(mResult);
theitem := LoWord(mResult);
todo := T_Menu;
good := true;
end;
end;
if code = InDrag then begin
{ tempRect := screenbits.bounds;}
{ SetRect(tempRect, tempRect.Left + 10, tempRect.Top + 25, tempRect.Right - 10, tempRect.Bottom - 10);}
tempRect := GetGrayRgn^^.rgnBBox;
DragWindow(HEwp, HEer.where, tempRect);
end;
if (code = inGrow) and (HEwp <> nil) then begin
SetPort(HEwp);
myPt := HEer.where;
GlobalToLocal(myPt);
OldRect := HEwp^.portRect;
with screenbits.bounds do
SetRect(tempRect, 15, 15, (right - left), (bottom - top) - 20);
mResult := GrowWindow(HEwp, HEer.where, tempRect);
SizeWindow(HEwp, LoWord(mResult), HiWord(mResult), TRUE);
SetPort(HEwp);
SetRect(tempRect, 0, myPt.v - 15, myPt.h + 15, myPt.v + 15);
EraseRect(tempRect);
InvalRect(tempRect);
SetRect(tempRect, myPt.h - 15, 0, myPt.h + 15, myPt.v + 15);
EraseRect(tempRect);
InvalRect(tempRect);
todo := T_Resize;
good := true;
end;
if (code = inZoomIn) or (code = inZoomOut) then begin
if HEwp <> nil then begin
SetPort(HEwp);
myPt := HEer.where;
GlobalToLocal(myPt);
OldRect := HEwp^.portRect;
if TrackBox(HEwp, myPt, code) then begin
ZoomWindow(HEwp, code, true);
SetRect(tempRect, 0, 0, 32000, 32000);
EraseRect(tempRect);
InvalRect(tempRect);
todo := T_Resize;
good := true;
end;
end;
end;
if code = inGoAway then begin
if HEwp <> FrontWindow then
SelectWindow(HEwp)
else if TrackGoAway(HEwp, HEer.where) then begin
if SimpleClose(HEwp) then begin
good := true;
todo := T_Close;
end;
end;
end;
if code = inContent then begin
if HEwp <> FrontWindow then
SelectWindow(HEwp)
else begin
if userWindow then begin
good := true;
todo := T_Content;
GlobalToLocal(HEer.where);
end;
end;
end;
if (code = inSysWindow) then
SystemClick(HEer, HEwp);
end;
AutoKey:
begin
if not Odd(HEer.modifiers div CmdKey) then begin
good := true;
todo := T_AutoKey;
end;
end;
KeyDown:
begin
with HEer do begin
ch := chr(BAND(message, CharCodeMask));
todo := T_Key;
if Odd(modifiers div CmdKey) then begin
mResult := MenuKey(ch);
if mResult <> 0 then begin
themenu := HiWord(mResult);
theitem := LoWord(mResult);
todo := T_Menu;
end;
end;
good := true;
end;
end;
UpdateEvt:
begin
HEwp := windowPtr(HEer.message);
good := true;
todo := T_Update;
end;
DiskEvt:
begin
if (HiWord(HEer.message) <> noErr) then begin
HEer.where.h := ((screenbits.bounds.Right - screenbits.bounds.Left) div 2) - (304 div 2);
HEer.where.v := ((screenbits.bounds.Bottom - screenbits.bounds.Top) div 3) - (104 div 2);
InitCursor;
oe := DIBadMount(HEer.where, HEer.message);
end;
end;
ActivateEvt:
begin
HEwp := WindowPtr(HEer.message);
if odd(HEer.modifiers) then begin
SelectWindow(HEwp);
todo := T_Activate;
end
else begin
todo := T_Deactivate;
end;
good := true;
end;
kOSEvent:
case BAnd(BRotL(HEer.message, 8), $FF) of {high byte of message}
kMouseMovedMessage:
begin
todo := T_MouseMoved;
good := true;
end;
kSuspendResumeMessage:
begin
in_foreground := BAnd(HEer.message, kResumeMask) <> 0;
InitCursor;
if in_foreground then begin
todo := T_Resume;
end
else
todo := T_Suspend;
good := true;
end;
otherwise
;
end;
kHighLevelEvent:
begin
todo := T_HighLevel;
good := true;
if has_AppleEvents then
oe := AEProcessAppleEvent(HEer);
end;
otherwise
end;
HandleEvents := good;
end;
end;
end.